if (typeof jQuery === 'undefined') {
	throw new Error('task.js \'s JavaScript requires jQuery');
}
'use strict';
function CommTask(option) {
	// 防止外部访问内部函数
	var obj = new Object();
	
	var _HOST = "";
	if(option && option.HOST){
		_HOST = option.HOST;
	}
	
	//最大显示数据
	var _MAX_COUNT = 30;
	if(option && option.MAX_COUNT){
		_MAX_COUNT = option.MAX_COUNT;
	}
	
	// MAP中存储数据
	var KEYDATA = new Object();
	// 数组中存储数据
	var DATA = new Array();
	// filehost
	var FILE_HOST = '';
	
	// 桌面图标
	var $icon = $('<div class="taskbutton"></div>');
	$icon.draggable();

	// 列表
	var $list = $('<div class="tasklist"><ul></ul></div>');
	var SHOW_TASKLIST = false;

	// 列表展示后,执行时func.
	var hoverFunc = undefined;

	$list.bind('mouseover', function() {
		if (hoverFunc)
			clearTimeout(hoverFunc);
	});

	$list.bind('mouseleave', function() {
		$list.animate({
			'right' : '-360px',
			'z-index' : '777'
		}, 300, function() {
			SHOW_TASKLIST = false;
		});
	});

	// 按钮绑定点击事件，弹出任务列表
	$icon.bind('click', function() {
		$icon.blur();

		$list.animate({
			'right' : '5px',
			'z-index' : '999'
		}, 300, function() {
			SHOW_TASKLIST = true;
		});

		clearTimeout(hoverFunc);
		hoverFunc = setTimeout(function() {
			$list.animate({
				'right' : '-360px',
				'z-index' : '777'
			}, 300, function() {
				SHOW_TASKLIST = false;
			});
		}, 3000);

		if (DATA.length == 0)
			obj.gets();
	});

	// 列表中的加载更多
	$o = $('<li><a href="javascript:void(0)">加载更多...</a></li>');
	$o.css('text-align', 'center');

	obj.gets = function() {
		var url = _HOST +"task/gets.ht";
		var p = {};
		p.start = 0;
		p.maximum = _MAX_COUNT;
		p._ = new Date().getTime();
		$.ajax({
			url : url,
			cache : false,
			data : p,
			dataType : 'json',
			success : function(data) {
				if (!data) {
					return;
				}

				if(!data.DATA){
					return;
				}
				
				//
				FILE_HOST = data.FILEHOST;
				
				for ( var x in data.DATA) {
					var task = data.DATA[x];
					if (KEYDATA[task.id]) {
						break;
					}
					KEYDATA[task.id] = task;
					DATA.push(task);
				}

				obj.show();
			}
		});

	};

	obj.restart = function(id){
		var p = {};
		p.id = id;
		p._ = new Date().getTime();
		$.ajax({
			url: _HOST + "task/restart.ht",
			cache:false,
			data:p,
			dataType:'json',
			success:function(data){
				if(!data){
					_alert('重启任务失败!');
					return;
				}
				if(!data.ret){
					_alert(data.msg?data.msg:'任务重启失败!');
				}else{
					//删除缓存任务
					KEYDATA = new Object();
					DATA.length = 0;
					
					$(this).remove();
					
					_alert(data.msg?data.msg:'任务重启成功!');
				}
			}
		});
	};
	
	obj.show = function() {
		$list.find('ul').html('');

		var _index = 0;
		if(DATA.length == 0){
			var $li = $('<li style="text-align:center;padding-top:10px;border-bottom:none;"></li>');
			$li.append('无数据');
			$list.find("ul").append($li);
		}
		for ( var x in DATA) {
			var task = DATA[x];
			_index++;
			var $li = $("<li></li>");
			var cDate = new Date(task.createDate);
			$li.append(_index
					+ '.&nbsp;&nbsp;<span class="taskTime">'
					+ cDate.getFullYear()
					+ '-'
					+ (cDate.getMonth() > 8 ? (cDate.getMonth() + 1)
							: ('0' + (cDate.getMonth() + 1)))
					+ '-'
					+ (cDate.getDate() > 9 ? cDate.getDate() : ('0' + cDate
							.getDate()))
					+ '&nbsp;'
					+ (cDate.getHours() > 9 ? cDate.getHours() : ('0' + cDate
							.getHours()))
					+ ':'
					+ (cDate.getMinutes() > 9 ? cDate.getMinutes()
							: ('0' + cDate.getMinutes()))
					+ ':'
					+ (cDate.getSeconds() > 9 ? cDate.getSeconds()
							: ('0' + cDate.getSeconds())) + '</span>');

			$li.append('&nbsp;&nbsp;&nbsp;');
			
			var status = task.statusCode;
			if (status == 'READY') {
				$li.append('<span class="taskStatus">【准备就绪】</span>');
			} else if (status == 'RUNNING') {
				$li.append('<span class="taskStatus">【运行中】</span>');
			} else if (status == 'COMPLETE') {
				$li.append('<span class="taskStatus">【已完成】</span>');
			} else if (status == 'ERROR') {
				$li.append('<span class="taskStatus">【失败】</span>');
			}
		
			$li.append('<br/>');
			$li.append('<span class="taskName">' + task.name + '</span>');

			$li.append('<br/>');
			if (status == 'COMPLETE') {
				$li.append('<div class="taskOperation"><a target="_blank" href="' + FILE_HOST + task.result + '">下载</a></div>');
			}else if(status == 'ERROR'){
				var restartOp = $('<div class="taskOperation"><a href="javascript:void(0)" taskid="' + task.id + '">重新启动</a></div>');
				$li.append(restartOp);
				restartOp.bind('click' , function(){
					obj.restart($(this).find("a").attr('taskid'));
				});
			}else{
				$li.append('<div class="taskOperation">&nbsp;</div>');	
			}

			$list.find("ul").append($li);
		}

		/** 每次查询30条数据，且最大只允许30条，所以不显示加载更多 * */
		// $o.bind('click' , function(){
		// obj.gets();
		// });
		// $list.find("ul").append($o);
	};

	obj.clear = function() {
		if (!SHOW_TASKLIST) {
			if (DATA.length != 0) {
				KEYDATA = new Object();
				DATA.length = 0;
			}
			return true;
		}
		return false;
	};

	$(function() {
		if (top == self) {
			$(document.body).prepend($icon);
			$(document.body).prepend($list);

			/**
			 * 页面存储的数据默认每15秒清空一次，再次点击显示列表时，再重新至数据库中进行查询
			 * 当任务列表处于展示状态时，将不清空页面保存的数据，但时间缩短至3秒后重新尝试。
			 * 
			 */
			var func = undefined;
			func = function() {
				if (obj.clear()) {
					setTimeout(func, 15000);
				} else {
					setTimeout(func, 1000);
				}
			};
			setTimeout(func, 15000);
		}
	});
}